home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / StandardFile.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  13KB  |  322 lines

  1. /*
  2.      File:        StandardFile.h
  3.  
  4.      Contains:    Standard File package Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __STANDARDFILE__
  19. #define __STANDARDFILE__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __DIALOGS__
  25. #include <Dialogs.h>
  26. #endif
  27. #ifndef __FILES__
  28. #include <Files.h>
  29. #endif
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34.  
  35. #if PRAGMA_IMPORT_SUPPORTED
  36. #pragma import on
  37. #endif
  38.  
  39. #if PRAGMA_ALIGN_SUPPORTED
  40. #pragma options align=mac68k
  41. #endif
  42.  
  43. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  44. /* The interfaces for other managers depend on these structs.*/
  45. struct SFReply {
  46.     Boolean                         good;
  47.     Boolean                         copy;
  48.     OSType                             fType;
  49.     short                             vRefNum;
  50.     short                             version;
  51.     Str63                             fName;
  52. };
  53. typedef struct SFReply SFReply;
  54.  
  55. struct StandardFileReply {
  56.     Boolean                         sfGood;
  57.     Boolean                         sfReplacing;
  58.     OSType                             sfType;
  59.     FSSpec                             sfFile;
  60.     ScriptCode                         sfScript;
  61.     short                             sfFlags;
  62.     Boolean                         sfIsFolder;
  63.     Boolean                         sfIsVolume;
  64.     long                             sfReserved1;
  65.     short                             sfReserved2;
  66. };
  67. typedef struct StandardFileReply StandardFileReply;
  68.  
  69. #endif
  70. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  71. /*
  72.  * Note to developers targeting for system versions later than System 7.x.
  73.  *
  74.  * After System 7.x, the routines in this file will become obsolete!
  75.  *
  76.  * For software targeted to later system versions, do not include this file.
  77.  * Instead, include Navigation and use its routines.  StandardFile routines will
  78.  * be implemented only for backward compatibility with System 7.x software.
  79.  *
  80. */
  81.  
  82. enum {
  83.                                                                 /* resource IDs and item offsets of pre-7.0 dialogs */
  84.     putDlgID                    = -3999,
  85.     putSave                        = 1,
  86.     putCancel                    = 2,
  87.     putEject                    = 5,
  88.     putDrive                    = 6,
  89.     putName                        = 7,
  90.     getDlgID                    = -4000,
  91.     getOpen                        = 1,
  92.     getCancel                    = 3,
  93.     getEject                    = 5,
  94.     getDrive                    = 6,
  95.     getNmList                    = 7,
  96.     getScroll                    = 8,                            /* resource IDs and item offsets of 7.0 dialogs */
  97.     sfPutDialogID                = -6043,
  98.     sfGetDialogID                = -6042,
  99.     sfItemOpenButton            = 1,
  100.     sfItemCancelButton            = 2,
  101.     sfItemBalloonHelp            = 3,
  102.     sfItemVolumeUser            = 4,
  103.     sfItemEjectButton            = 5
  104. };
  105.  
  106.  
  107. enum {
  108.     sfItemDesktopButton            = 6,
  109.     sfItemFileListUser            = 7,
  110.     sfItemPopUpMenuUser            = 8,
  111.     sfItemDividerLinePict        = 9,
  112.     sfItemFileNameTextEdit        = 10,
  113.     sfItemPromptStaticText        = 11,
  114.     sfItemNewFolderUser            = 12,                            /* pseudo-item hits for use in DlgHook */
  115.     sfHookFirstCall                = -1,
  116.     sfHookCharOffset            = 0x1000,
  117.     sfHookNullEvent                = 100,
  118.     sfHookRebuildList            = 101,
  119.     sfHookFolderPopUp            = 102,
  120.     sfHookOpenFolder            = 103,                            /* the following are only in system 7.0+ */
  121.     sfHookOpenAlias                = 104,
  122.     sfHookGoToDesktop            = 105,
  123.     sfHookGoToAliasTarget        = 106,
  124.     sfHookGoToParent            = 107,
  125.     sfHookGoToNextDrive            = 108,
  126.     sfHookGoToPrevDrive            = 109,
  127.     sfHookChangeSelection        = 110
  128. };
  129.  
  130.  
  131. enum {
  132.     sfHookSetActiveOffset        = 200,
  133.     sfHookLastCall                = -2
  134. };
  135.  
  136. /*
  137.  the refcon field of the dialog record during a
  138.  modalfilter or dialoghook contains one of the following 
  139. */
  140.  
  141. enum {
  142.     sfMainDialogRefCon            = 'stdf',
  143.     sfNewFolderDialogRefCon        = 'nfdr',
  144.     sfReplaceDialogRefCon        = 'rplc',
  145.     sfStatWarnDialogRefCon        = 'stat',
  146.     sfLockWarnDialogRefCon        = 'lock',
  147.     sfErrorDialogRefCon            = 'err '
  148. };
  149.  
  150. /* for CustomXXXFile, ActivationOrderListPtr parameter is a pointer to an array of item numbers */
  151. typedef const short *ActivationOrderListPtr;
  152. typedef pascal short (*DlgHookProcPtr)(short item, DialogPtr theDialog);
  153. typedef pascal Boolean (*FileFilterProcPtr)(CInfoPBPtr pb);
  154. /* the following also include an extra parameter of "your data pointer" */
  155. typedef pascal short (*DlgHookYDProcPtr)(short item, DialogPtr theDialog, void *yourDataPtr);
  156. typedef pascal Boolean (*ModalFilterYDProcPtr)(DialogPtr theDialog, EventRecord *theEvent, short *itemHit, void *yourDataPtr);
  157. typedef pascal Boolean (*FileFilterYDProcPtr)(CInfoPBPtr pb, void *yourDataPtr);
  158. typedef pascal void (*ActivateYDProcPtr)(DialogPtr theDialog, short itemNo, Boolean activating, void *yourDataPtr);
  159.  
  160. #if GENERATINGCFM
  161. typedef UniversalProcPtr DlgHookUPP;
  162. typedef UniversalProcPtr FileFilterUPP;
  163. typedef UniversalProcPtr DlgHookYDUPP;
  164. typedef UniversalProcPtr ModalFilterYDUPP;
  165. typedef UniversalProcPtr FileFilterYDUPP;
  166. typedef UniversalProcPtr ActivateYDUPP;
  167. #else
  168. typedef DlgHookProcPtr DlgHookUPP;
  169. typedef FileFilterProcPtr FileFilterUPP;
  170. typedef DlgHookYDProcPtr DlgHookYDUPP;
  171. typedef ModalFilterYDProcPtr ModalFilterYDUPP;
  172. typedef FileFilterYDProcPtr FileFilterYDUPP;
  173. typedef ActivateYDProcPtr ActivateYDUPP;
  174. #endif
  175.  
  176. enum {
  177.     uppDlgHookProcInfo = kPascalStackBased
  178.          | RESULT_SIZE(SIZE_CODE(sizeof(short)))
  179.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  180.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(DialogPtr))),
  181.     uppFileFilterProcInfo = kPascalStackBased
  182.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  183.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(CInfoPBPtr))),
  184.     uppDlgHookYDProcInfo = kPascalStackBased
  185.          | RESULT_SIZE(SIZE_CODE(sizeof(short)))
  186.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  187.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(DialogPtr)))
  188.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *))),
  189.     uppModalFilterYDProcInfo = kPascalStackBased
  190.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  191.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  192.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(EventRecord *)))
  193.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short *)))
  194.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(void *))),
  195.     uppFileFilterYDProcInfo = kPascalStackBased
  196.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  197.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(CInfoPBPtr)))
  198.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(void *))),
  199.     uppActivateYDProcInfo = kPascalStackBased
  200.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  201.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  202.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean)))
  203.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(void *)))
  204. };
  205.  
  206. #if GENERATINGCFM
  207. #define NewDlgHookProc(userRoutine)        \
  208.         (DlgHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDlgHookProcInfo, GetCurrentArchitecture())
  209. #define NewFileFilterProc(userRoutine)        \
  210.         (FileFilterUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileFilterProcInfo, GetCurrentArchitecture())
  211. #define NewDlgHookYDProc(userRoutine)        \
  212.         (DlgHookYDUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDlgHookYDProcInfo, GetCurrentArchitecture())
  213. #define NewModalFilterYDProc(userRoutine)        \
  214.         (ModalFilterYDUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppModalFilterYDProcInfo, GetCurrentArchitecture())
  215. #define NewFileFilterYDProc(userRoutine)        \
  216.         (FileFilterYDUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileFilterYDProcInfo, GetCurrentArchitecture())
  217. #define NewActivateYDProc(userRoutine)        \
  218.         (ActivateYDUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppActivateYDProcInfo, GetCurrentArchitecture())
  219. #else
  220. #define NewDlgHookProc(userRoutine)        \
  221.         ((DlgHookUPP) (userRoutine))
  222. #define NewFileFilterProc(userRoutine)        \
  223.         ((FileFilterUPP) (userRoutine))
  224. #define NewDlgHookYDProc(userRoutine)        \
  225.         ((DlgHookYDUPP) (userRoutine))
  226. #define NewModalFilterYDProc(userRoutine)        \
  227.         ((ModalFilterYDUPP) (userRoutine))
  228. #define NewFileFilterYDProc(userRoutine)        \
  229.         ((FileFilterYDUPP) (userRoutine))
  230. #define NewActivateYDProc(userRoutine)        \
  231.         ((ActivateYDUPP) (userRoutine))
  232. #endif
  233.  
  234. #if GENERATINGCFM
  235. #define CallDlgHookProc(userRoutine, item, theDialog)        \
  236.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDlgHookProcInfo, (item), (theDialog))
  237. #define CallFileFilterProc(userRoutine, pb)        \
  238.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppFileFilterProcInfo, (pb))
  239. #define CallDlgHookYDProc(userRoutine, item, theDialog, yourDataPtr)        \
  240.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDlgHookYDProcInfo, (item), (theDialog), (yourDataPtr))
  241. #define CallModalFilterYDProc(userRoutine, theDialog, theEvent, itemHit, yourDataPtr)        \
  242.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppModalFilterYDProcInfo, (theDialog), (theEvent), (itemHit), (yourDataPtr))
  243. #define CallFileFilterYDProc(userRoutine, pb, yourDataPtr)        \
  244.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppFileFilterYDProcInfo, (pb), (yourDataPtr))
  245. #define CallActivateYDProc(userRoutine, theDialog, itemNo, activating, yourDataPtr)        \
  246.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppActivateYDProcInfo, (theDialog), (itemNo), (activating), (yourDataPtr))
  247. #else
  248. #define CallDlgHookProc(userRoutine, item, theDialog)        \
  249.         (*(userRoutine))((item), (theDialog))
  250. #define CallFileFilterProc(userRoutine, pb)        \
  251.         (*(userRoutine))((pb))
  252. #define CallDlgHookYDProc(userRoutine, item, theDialog, yourDataPtr)        \
  253.         (*(userRoutine))((item), (theDialog), (yourDataPtr))
  254. #define CallModalFilterYDProc(userRoutine, theDialog, theEvent, itemHit, yourDataPtr)        \
  255.         (*(userRoutine))((theDialog), (theEvent), (itemHit), (yourDataPtr))
  256. #define CallFileFilterYDProc(userRoutine, pb, yourDataPtr)        \
  257.         (*(userRoutine))((pb), (yourDataPtr))
  258. #define CallActivateYDProc(userRoutine, theDialog, itemNo, activating, yourDataPtr)        \
  259.         (*(userRoutine))((theDialog), (itemNo), (activating), (yourDataPtr))
  260. #endif
  261. typedef OSType SFTypeList[4];
  262. /*
  263.     The GetFile "typeList" parameter type has changed from "SFTypeList" to "ConstSFTypeListPtr".
  264.     For C, this will add "const" and make it an in-only parameter.
  265.     For Pascal, this will require client code to use the @ operator, but make it easier to specify long lists.
  266.  
  267.     ConstSFTypeListPtr is a pointer to an array of OSTypes.
  268. */
  269. typedef const OSType *ConstSFTypeListPtr;
  270. extern pascal void SFPutFile(Point where, ConstStr255Param prompt, ConstStr255Param origName, DlgHookUPP dlgHook, SFReply *reply)
  271.  THREEWORDINLINE(0x3F3C, 0x0001, 0xA9EA);
  272.  
  273. extern pascal void SFGetFile(Point where, ConstStr255Param prompt, FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, DlgHookUPP dlgHook, SFReply *reply)
  274.  THREEWORDINLINE(0x3F3C, 0x0002, 0xA9EA);
  275.  
  276. extern pascal void SFPPutFile(Point where, ConstStr255Param prompt, ConstStr255Param origName, DlgHookUPP dlgHook, SFReply *reply, short dlgID, ModalFilterUPP filterProc)
  277.  THREEWORDINLINE(0x3F3C, 0x0003, 0xA9EA);
  278.  
  279. extern pascal void SFPGetFile(Point where, ConstStr255Param prompt, FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, DlgHookUPP dlgHook, SFReply *reply, short dlgID, ModalFilterUPP filterProc)
  280.  THREEWORDINLINE(0x3F3C, 0x0004, 0xA9EA);
  281.  
  282. extern pascal void StandardPutFile(ConstStr255Param prompt, ConstStr255Param defaultName, StandardFileReply *reply)
  283.  THREEWORDINLINE(0x3F3C, 0x0005, 0xA9EA);
  284.  
  285. extern pascal void StandardGetFile(FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, StandardFileReply *reply)
  286.  THREEWORDINLINE(0x3F3C, 0x0006, 0xA9EA);
  287.  
  288. extern pascal void CustomPutFile(ConstStr255Param prompt, ConstStr255Param defaultName, StandardFileReply *reply, short dlgID, Point where, DlgHookYDUPP dlgHook, ModalFilterYDUPP filterProc, ActivationOrderListPtr activeList, ActivateYDUPP activate, void *yourDataPtr)
  289.  THREEWORDINLINE(0x3F3C, 0x0007, 0xA9EA);
  290.  
  291. extern pascal void CustomGetFile(FileFilterYDUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, StandardFileReply *reply, short dlgID, Point where, DlgHookYDUPP dlgHook, ModalFilterYDUPP filterProc, ActivationOrderListPtr activeList, ActivateYDUPP activate, void *yourDataPtr)
  292.  THREEWORDINLINE(0x3F3C, 0x0008, 0xA9EA);
  293.  
  294. extern pascal OSErr StandardOpenDialog(StandardFileReply *reply);
  295.  
  296. #if CGLUESUPPORTED
  297. extern void sfpputfile(Point *where, const char *prompt, const char *origName, DlgHookUPP dlgHook, SFReply *reply, short dlgID, ModalFilterUPP filterProc);
  298.  
  299. extern void sfgetfile(Point *where, const char *prompt, FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, DlgHookUPP dlgHook, SFReply *reply);
  300.  
  301. extern void sfpgetfile(Point *where, const char *prompt, FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, DlgHookUPP dlgHook, SFReply *reply, short dlgID, ModalFilterUPP filterProc);
  302.  
  303. extern void sfputfile(Point *where, const char *prompt, const char *origName, DlgHookUPP dlgHook, SFReply *reply);
  304.  
  305. #endif
  306. #endif
  307.  
  308. #if PRAGMA_ALIGN_SUPPORTED
  309. #pragma options align=reset
  310. #endif
  311.  
  312. #if PRAGMA_IMPORT_SUPPORTED
  313. #pragma import off
  314. #endif
  315.  
  316. #ifdef __cplusplus
  317. }
  318. #endif
  319.  
  320. #endif /* __STANDARDFILE__ */
  321.  
  322.